package com.zhenai.sys.dao.utils.tree;

import java.util.List;

/**
 * @author wangrongji
 * @date 2023-09-06 19:03
 */
public interface TreeNode<T, S extends TreeNode<T, S>> {

    /**
     * 获取节点id
     *
     * @return T
     */
    T id();

    /**
     * 获取该节点的父节点id
     *
     * @return
     */
    T parentId();

    Integer orderNum();

    /**
     * 是否是根节点
     *
     * @return true is root
     */
    boolean root();

    /**
     * 设置节点的子节点列表
     *
     * @param children 子节点
     */
    void setChildrenNodes(List<S> children);

    /**
     * 获取所有子节点
     *
     * @return Iterable<S>
     */
    Iterable<S> getChildrenNodes();

    /**
     * 添加克隆方法，可以进行T对象深复制, 未实现
     *
     * @param s 克隆对象
     * @return S
     */
    default S clone(S s) {
        return s;
    }
}


